package org.javahispano.javacup.tacticas_aceptadas.sjvc.SubTacticasDefensa;
import org.javahispano.javacup.modelo.*;

import org.javahispano.javacup.tacticas_aceptadas.sjvc.SituacionPartidoSergio;
import java.util.ArrayList;
import java.util.List;

public class STDDespejarCubriendoDelanteros extends STDDespejar {
	
	public STDDespejarCubriendoDelanteros(){

	}
	
	private double distanciaAlRival = 3;
	
	//Obtiene un jugador que puede cubrir a "indiceRivalACubrir"
	//ese jugador no sera uno de los que estan en la lista "jugadoresCubriendo"
	private int JugadorParaCubrir(int indiceRivalACubrir, ArrayList<Integer> jugadoresCubriendo, SituacionPartido sp){
		for(int i : sp.rivales()[indiceRivalACubrir].indicesMasCercanos(sp.misJugadores())){
			if(!jugadoresCubriendo.contains(i) && i!=0) //El portero no!
				return i;
		}
		
		return -1;
	}
	
	@Override
	protected List<Comando> _ejecutar(SituacionPartido sp, SituacionPartidoSergio spAnterior) {
		
		//Ejecutamos la tactica de defensa realizando despejes
		List<Comando> comandos = super._ejecutar(sp, spAnterior);

		//Cubrimos a los delanteros del equipo contrario que esten en mi campo
		ArrayList<Integer> jugadoresCubriendo = new ArrayList<Integer>();
		for(int indiceRival=0;indiceRival<11;indiceRival++){
			Posicion posRival = sp.rivales()[indiceRival];
			
			if(posRival.distancia(Constantes.centroArcoInf) <= Constantes.LARGO_CAMPO / 2){
				
				//Obtener jugador que cubrira al rival
				int miJugador = JugadorParaCubrir(indiceRival, jugadoresCubriendo, sp);
				
				//"miJugador" cubre a "rival" solo si la pelota no esta cerca (si lo esta ira a por ella)
				if(miJugador != -1 && sp.balon().distancia(sp.misJugadores()[miJugador]) > Constantes.DISTANCIA_PENAL  ){
					jugadoresCubriendo.add(miJugador);
					
					//angulo entre la posicion del rival y el balon
					double angulo = posRival.angulo(sp.balon());
					double posX = posRival.getX() +  distanciaAlRival * Math.cos(angulo);
					double posY = posRival.getY() +  distanciaAlRival * Math.sin(angulo);
					
					Posicion posCubrir = new Posicion(posX, posY);
					
					comandos.add(new ComandoIrA(miJugador, posCubrir));
				}
			}
		}
	
		return comandos;
	}
	
}